ASP.NET Core-এ Authorization হল একটি গুরুত্বপূর্ণ নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীদের নির্দিষ্ট রিসোর্স বা অ্যাপ্লিকেশনে অ্যাক্সেস প্রদান বা অস্বীকার করে। দুটি প্রধান ধরনের Authorization পদ্ধতি রয়েছে: Role-based Authorization এবং Policy-based Authorization। চলুন, এগুলোর বিস্তারিত সম্পর্কে জানি।
Role-based Authorization হল একটি সাধারণ এবং জনপ্রিয় পদ্ধতি যেখানে ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে অ্যাপ্লিকেশনে বিভিন্ন রিসোর্স বা অ্যাক্সেস অনুমোদন করা হয়। একে Role-based Access Control (RBAC) বলা হয়।
[Authorize]
অ্যাট্রিবিউট ব্যবহার করে রোল-বেসড অথোরাইজেশন কনফিগার করতে পারেন।ধরা যাক, আমাদের অ্যাপ্লিকেশনে দুটি রোল আছে: "Admin" এবং "User"। এখানে, Admin রোলের ব্যবহারকারী অ্যাডমিন প্যানেলে প্রবেশ করতে পারবে, কিন্তু User রোলের ব্যবহারকারী তা করতে পারবে না।
[Authorize(Roles = "Admin")]
public IActionResult AdminPanel()
{
return View();
}
[Authorize(Roles = "User")]
public IActionResult UserDashboard()
{
return View();
}
এখানে, AdminPanel
শুধুমাত্র Admin রোলের ব্যবহারকারী দেখতে পারবেন, এবং UserDashboard
কেবল User রোলের ব্যবহারকারীর জন্যই অ্যাক্সেসযোগ্য।
ASP.NET Core-এ রোল তৈরি এবং অ্যাসাইন করতে হলে UserManager এবং RoleManager ব্যবহৃত হয়।
public class SeedData
{
public static async Task Initialize(IServiceProvider serviceProvider, UserManager<ApplicationUser> userManager)
{
var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string[] roleNames = { "Admin", "User" };
foreach (var roleName in roleNames)
{
var roleExist = await roleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
var role = new IdentityRole(roleName);
await roleManager.CreateAsync(role);
}
}
var user = await userManager.FindByEmailAsync("admin@admin.com");
if (user == null)
{
user = new ApplicationUser { UserName = "admin@admin.com", Email = "admin@admin.com" };
await userManager.CreateAsync(user, "Test@123");
}
await userManager.AddToRoleAsync(user, "Admin");
}
}
এটি Admin এবং User রোল তৈরি করবে এবং ব্যবহারকারীকে নির্দিষ্ট রোল প্রদান করবে।
Policy-based Authorization হল আরও শক্তিশালী এবং নমনীয় একটি পদ্ধতি যা নির্দিষ্ট শর্ত বা নিয়মের ভিত্তিতে ব্যবহারকারীকে অনুমতি দেয়। এটি Claims বা অন্যান্য কাস্টম প্যারামিটার ব্যবহার করে অধিক নমনীয় অ্যাক্সেস কন্ট্রোল প্রদান করে।
ধরা যাক, আপনি একটি পলিসি তৈরি করতে চান যা ব্যবহারকারীর বয়স ১৮ বছরের বেশি হলে তাকে একটি নির্দিষ্ট রিসোর্স অ্যাক্সেস দেওয়ার অনুমতি দেয়।
ConfigureServices
মেথডে পলিসি কনফিগার করুন।public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options =>
{
options.AddPolicy("Over18", policy => policy.RequireClaim("Age", "18"));
});
}
এখানে, "Over18"
পলিসি সেই ব্যবহারকারীকে অনুমতি দিবে যার Age claim-এ মান "18" অথবা তার বেশি থাকবে।
[Authorize(Policy = "Over18")]
public IActionResult RestrictedArea()
{
return View();
}
এখানে, RestrictedArea
পেজে শুধুমাত্র সেই ব্যবহারকারী প্রবেশ করতে পারবে, যাদের Age claim-এ ১৮ অথবা তার বেশি মান থাকবে।
আপনি নিজের কাস্টম পলিসিও তৈরি করতে পারেন, যেখানে শর্ত হিসেবে ব্যবহারকারীর বিভিন্ন বৈশিষ্ট্য বা Claims যাচাই করা হয়।
services.AddAuthorization(options =>
{
options.AddPolicy("MustBeAdmin", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(c => c.Type == "Role" && c.Value == "Admin"));
});
এই কাস্টম পলিসি চেক করবে, ব্যবহারকারীর Role claim-এ "Admin"
মান আছে কিনা।
Role-based Authorization এবং Policy-based Authorization উভয়ই ASP.NET Core-এ শক্তিশালী অথোরাইজেশন পদ্ধতি। Role-based Authorization সোজা এবং ব্যবহার করা সহজ, যেখানে আপনি নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করেন। অন্যদিকে, Policy-based Authorization বেশি নমনীয় এবং কাস্টম শর্তে ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করতে সক্ষম। এই দুটি পদ্ধতি একে অপরকে পরিপূরক হিসেবে কাজ করে এবং নিরাপত্তা ব্যবস্থাকে আরও শক্তিশালী করে তোলে।
common.read_more